package com.shuang.hash2;

import java.util.HashSet;
import java.util.Set;

public class Intersection {

    public int[] intersection(int[] nums1, int[] nums2) {
        // 两个数组的交集 每个元素唯一 考虑使用set集合

        if (nums1 == null || nums1.length == 0 || nums2 == null || nums2.length == 0) {
            return new int[0];
        }

        //定义两个set集合 第一个用于存放nums1数组中的去重元素 第二个用于存放两个数组的交集元素
        Set<Integer> nums1Set = new HashSet();
        Set<Integer> resultSet = new HashSet();

        for (int num1 : nums1){
            nums1Set.add(num1);
        }

        for (int num2 : nums2){
            if (nums1Set.contains(num2)){
                resultSet.add(num2);
            }
        }

        //将resultSet集合转为数组返回
        /**
         * 方法1：
         * 将 Set<Integer> 转换为 int[] 数组：
         * 1. stream() : Collection 接口的方法，将集合转换为 Stream<Integer>
         * 2. mapToInt(Integer::intValue) :
         *    - 中间操作，将 Stream<Integer> 转换为 IntStream
         *    - 使用方法引用 Integer::intValue，将 Integer 对象拆箱为 int 基本类型
         * 3. toArray() : 终端操作，将 IntStream 转换为 int[] 数组。
         */
        int[] res = resultSet.stream().mapToInt(Integer::intValue).toArray();

        return res;




       /* //方法2：另外申请一个数组存放setRes中的元素,最后返回数组
        int[] arr = new int[resultSet.size()];
        int j = 0;
        for(int i : resultSet){
            arr[j++] = i;
        }

        return arr;*/
    }
}
